home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib08.dsk
/
APPLE CAL.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
20KB
|
501 lines
1 REM ***************************
2 REM * APPLE CAL *
3 REM * BY GLENN TEMAN *
4 REM * COPYRIGHT (C) 1982 *
5 REM * BY MICRO-SPARC INC *
6 REM * LINCOLN, MA. 01773 *
7 REM ***************************
10 DIM N$(12,31),MO$(12)
20 L$ = CHR$(124):D$ = CHR$(4)
30 DA$ = "312831303130313130313031":SLOT = 1
40 FOR I = 1 TO 12: READ A$:MO$(I) = A$: NEXT I
45 DATA JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER
60 DEF FN M(X) = ((X/4 - INT(X/4)) *4): DEF FN W(X) = ((X/7 - INT(X/7)) *7)
100 GOSUB 20000: REM TITLE PAGE
110 HOME : VTAB 10: HTAB 11: PRINT "<JUST A MOMENT...>"
115 GOSUB 20400
120 YE = 1981:NOO = 1
130 ONERR GOTO 11000
140 SAV = 0
150 Y = YE: GOSUB 7070:Y = 0
160 POKE 216,0
170 NOO = 0
500 REM ** MENU **
510 HOME : PRINT : PRINT
515 INVERSE
520 PRINT "APPLE CAL";: HTAB 24: PRINT "BY GLENN TEMAN"
525 NORMAL
530 VTAB 8
540 PRINT "1) PRINT CALENDAR"
550 VTAB 10: PRINT "2) ENTER/EDIT IMPORTANT DATES"
560 VTAB 12: PRINT "3) ENTER HOLIDAYS"
570 VTAB 14: PRINT "4) LIST IMPORTANT DATES"
580 VTAB 16: PRINT "5) QUIT"
590 VTAB 22: INVERSE : PRINT " CHOICE: ";: NORMAL
600 INPUT " ";A$:I = VAL(A$)
610 IF I <1 OR I >5 THEN PRINT CHR$(7): GOTO 510
620 ON I GOTO 1000,3000,4000,5000,10000
1000 REM ** PRINT CALENDAR **
1010 A$ = "PRINT CALENDAR": GOSUB 8000
1020 VTAB 8: HTAB 1: PRINT "FROM MONTH (JAN): ";: CALL -868
1030 VTAB 10: HTAB 1: PRINT "THRU MONTH (DEC): ";: CALL -868
1040 VTAB 12: HTAB 1: PRINT "YEAR (";YE;"): ";: CALL -868
1050 VTAB 14: HTAB 1: PRINT " OK? (Y): ";: CALL -868
1060 VTAB 8: HTAB 19: CALL -868: INPUT "";A$
1070 IF A$ = "^" THEN 500
1080 IF A$ = "" THEN A$ = "JAN": VTAB 8: HTAB 19: PRINT "JAN"
1090 GOSUB 1280: IF ERR THEN 1060
1100 F = VAL(A$)
1110 VTAB 10: HTAB 19: CALL -868: INPUT "";A$
1120 IF A$ = "^" THEN 500
1130 IF A$ = "" THEN A$ = "DEC": VTAB 10: HTAB 19: PRINT "DEC"
1140 GOSUB 1280: IF ERR THEN 1110
1150 T = VAL(A$)
1160 IF F >T THEN PRINT CHR$(7);: GOTO 1060
1170 VTAB 12: HTAB 14: CALL -868: INPUT "";Y$
1180 IF Y$ = "^" THEN 500
1190 IF Y$ = "" THEN Y$ = STR$(YE): VTAB 12: HTAB 14: PRINT Y$
1200 Y = VAL(Y$): IF Y <1981 OR Y >2000 THEN PRINT CHR$(7);: GOTO 1170
1210 VTAB 14: HTAB 15: CALL -868: INPUT "";A$
1220 IF A$ < >"" AND LEFT$(A$,1) < >"Y" THEN 500
1230 VTAB 14: HTAB 15: PRINT "YES"
1233 REM LOAD FROM DISK?
1235 IF YE < >Y THEN YE = Y: GOSUB 7000
1240 GOSUB 1360: REM FIND 1ST DAY OF MONTH
1250 GOTO 1500
1255 PRINT D$;"PR#0"
1260 GOTO 500
1270 REM
1280 REM ** MONTH ERROR **
1290 ERR = 0
1300 FOR I = 1 TO 12
1310 IF A$ = MID$ ("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",I *3 -2,3) THEN 1340
1320 NEXT I
1330 PRINT CHR$(7);:ERR = 1: RETURN
1340 A$ = STR$(I): RETURN
1350 REM
1360 REM ** LOOP ON MONTHS **
1370 KK = 5
1380 YR = Y -1981 -1: IF YR <0 THEN 1430
1390 FOR I = 0 TO YR
1400 KK = KK +365
1410 YY = 1981 +I: GOSUB 2600:KK = KK +LEAP
1420 NEXT
1430 MN = F -1: IF MN <1 THEN 1480
1450 FOR I = 1 TO MN
1460 KK = KK + VAL( MID$ (DA$,I *2 -1,2))
1465 IF I = 2 THEN YY = Y: GOSUB 2600:KK = KK +LEAP: REM FEB IN LEAP YR
1470 NEXT
1480 DAY = INT( FN W(KK) +.5): REM WEEKDAY OF 1ST DAY OF MONTH
1485 IF DAY = 0 THEN DAY = 7
1490 RETURN
1500 M = F -1
1505 M = M +1: IF M >T THEN 1570
1510 GOSUB 1580
1515 KH = KK: GOSUB 2240: REM LAST & NEXT MONTH
1520 KK = KH + VAL( MID$ (DA$,M *2 -1,2))
1530 IF M = 2 THEN YY = Y: GOSUB 2600:KK = KK +LEAP
1540 DAY = INT( FN W(KK) +.5)
1545 IF DAY = 0 THEN DAY = 7
1550 PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : REM NEXT PAGE
1560 GOTO 1505
1570 GOTO 1255
1580 REM ** PRINTING **
1590 PRINT : PRINT D$;"PR#";SLOT
1600 PRINT : PRINT : PRINT
1610 M$ = MO$(M):L = LEN(M$) *2:ND = VAL( MID$ (DA$,M *2 -1,2))
1620 IF M = 2 THEN YY = Y: GOSUB 2600:ND = ND +LEAP
1630 S = (78 -L -3)/2
1640 PRINT TAB( S); LEFT$("*********************",L +3)
1650 PRINT " APPLE ]"; CHR$(91);"+";
1660 PRINT TAB( S);"* ";
1670 FOR I = 1 TO L/2: PRINT MID$ (M$,I,1);" ";: NEXT I: PRINT "*";
1680 PRINT SPC( 67 -S -L);Y
1690 PRINT TAB( S); LEFT$("*********************",L +3)
1700 PRINT : FOR I = 1 TO 78: PRINT "=";: NEXT
1710 PRINT : PRINT L$;" SUN ";L$;" MON ";
1720 PRINT L$;" TUE ";L$;" WED ";L$;" THR ";L$;
1730 PRINT " FRI ";L$;" SAT ";L$
1740 FOR I = 1 TO 78: PRINT "=";: NEXT : PRINT
1750 DAY = -DAY +2
1760 FOR R = 1 TO 6
1770 FOR RR = 1 TO 6
1780 PRINT L$;: IF RR >1 THEN 1870
1790 FOR I = 1 TO 7
1800 IF DAY <1 OR DAY >ND THEN PRINT " ";: GOTO 1830
1810 IF DAY <10 THEN PRINT " ";
1820 PRINT DAY;
1830 DAY = DAY +1
1840 PRINT " ";L$;
1850 NEXT I
1860 GOTO 2130
1870 IF RR >4 THEN 1920
1880 FOR I = 1 TO 7
1890 PRINT " ";L$;
1900 NEXT I
1910 GOTO 2130
1920 FOR D = DAY -7 TO DAY -1
1930 IF D <1 OR D >ND THEN SP = 10: GOTO 1960
1940 SP = 10
1950 IF N$(M,D) < >"" THEN GOSUB 1990:SP = LFT
1960 PRINT SPC( SP);L$;
1970 NEXT D
1980 GOTO 2130
1990 REM ** NOTES ON CAL **
2000 A$ = N$(M,D)
2005 L = 0
2007 L = L +1: IF L > LEN(A$) THEN 2030
2010 IF MID$ (A$,L,1) = "/" THEN 2110
2020 GOTO 2007
2030 IF LEN(A$) <10 THEN LFT = 10: IF RR = 6 THEN PRINT A$;:LFT = 10 - LEN(A$)
2035 IF LEN(A$) <10 THEN RETURN
2040 L = LEN(A$)/2:LFT = 10 -L
2050 IF L < > INT(L) THEN 2080
2060 IF RR = 5 THEN PRINT LEFT$(A$,L);"-";:LFT = LFT -1: RETURN
2070 PRINT RIGHT$(A$,L);: RETURN
2080 IF RR = 5 THEN PRINT LEFT$(A$,L);"-";: RETURN
2090 PRINT RIGHT$(A$,L +1);: RETURN
2100 REM 2 LINES OF DATES (/)
2110 IF RR = 5 THEN PRINT "."; LEFT$(A$,L -1);:LFT = 10 -L: RETURN
2120 PRINT "."; RIGHT$(A$, LEN(A$) -L);:LFT = 9 - LEN(A$) +L: RETURN
2130 PRINT
2140 NEXT RR
2150 PRINT L$;
2160 FOR I = 1 TO 7
2170 PRINT "----------";
2180 IF I <7 THEN PRINT "+";
2190 IF I = 7 THEN PRINT L$
2200 NEXT I
2210 NEXT R
2220 RETURN
2230 REM
2240 REM ** PRINT LAST & NEXT MONTH **
2250 IF M = 1 AND Y = 1981 THEN D1 = -2 +2:N1 = 31:: GOTO 2290: REM DEC '80
2260 F = M -1: IF F <1 THEN F = 12:Y = Y -1
2270 GOSUB 1360: IF F = 12 THEN Y = Y +1
2280 D1 = -DAY +2:N1 = VAL( MID$ (DA$,F *2 -1,2)): IF F = 2 THEN YY = Y: GOSUB 2600:N1 = N1 +LEAP
2290 F = M +1: IF F >12 THEN F = 1:Y = Y +1
2300 GOSUB 1360: IF F = 1 THEN Y = Y -1
2310 D2 = -DAY +2:N2 = VAL( MID$ (DA$,F *2 -1,2)): IF F = 2 THEN YY = Y: GOSUB 2600:N2 = N2 +LEAP
2320 FOR I = 1 TO 6
2330 IF I = 3 THEN PRINT " * NIBBLE MAGAZINE * ";: GOTO 2360
2340 IF I = 4 THEN PRINT " (C) GLENN TEMAN 1981";: GOTO 2360
2350 PRINT SPC( 23);
2360 PRINT SPC( 4);
2370 FOR J = 1 TO 7
2380 IF D1 <1 THEN PRINT " ";:D1 = D1 +1: GOTO 2430
2400 IF D1 >N1 THEN PRINT " ";: GOTO 2430
2410 IF D1 <10 THEN PRINT " ";
2420 PRINT " ";D1;:D1 = D1 +1
2430 NEXT J
2440 PRINT SPC( 5);
2450 FOR J = 1 TO 7
2460 IF D2 <1 THEN PRINT " ";:D2 = D2 +1: GOTO 2510
2480 IF D2 >N2 THEN PRINT " ";: GOTO 2510
2490 IF D2 <10 THEN PRINT " ";
2500 PRINT " ";D2;:D2 = D2 +1
2510 NEXT J
2520 PRINT
2530 NEXT I
2540 PRINT SPC( 35);MO$(M -1 +12 *(M = 1));
2545 I = LEN(MO$(M -1 +12 *(M = 1)))
2550 PRINT SPC( 60 -35 -I);MO$(M +1 -12 *(M = 12))
2560 RETURN
2600 REM ** LEAP YR? **
2610 LEAP = 0
2620 IF INT( FN M(YY) +.5) = 0 AND YY/100 < > INT(YY/100) THEN LEAP = 1
2630 RETURN
3000 REM ** ENTER/EDIT IMPORTANT DATES **
3010 A$ = "ENTER/EDIT IMPORTANT DATES": GOSUB 8000:L = 0
3020 VTAB 8: HTAB 1: CALL -868: PRINT "YEAR (";YE;"):"
3030 VTAB 12: HTAB 1: CALL -868: PRINT "MONTH:"
3040 VTAB 14: HTAB 1: CALL -868: PRINT "DAY:"
3050 VTAB 16: HTAB 1: CALL -868: PRINT "TEXT:"
3060 IF L THEN 3110
3070 VTAB 8: HTAB 14: CALL -868: INPUT "";Y$
3080 IF Y$ = "" THEN Y$ = STR$(YE): VTAB 8: HTAB 14: PRINT Y$;
3090 IF Y$ = "^" THEN 500
3100 Y = VAL(Y$): IF Y <1981 OR Y >2000 THEN PRINT CHR$(7);: GOTO 3070
3105 IF Y < >YE THEN GOSUB 7000:YE = Y
3110 VTAB 12: HTAB 8: CALL -868: INPUT "";A$
3120 IF A$ = "^" THEN 3400
3130 GOSUB 1280: IF ERR THEN 3110
3140 M = VAL(A$)
3150 VTAB 14: HTAB 6: CALL -868: INPUT "";A$
3160 IF A$ = "^" THEN 500
3170 DAY = VAL(A$): IF DAY = 0 THEN PRINT CHR$(7);: GOTO 3150
3180 D = VAL( MID$ (DA$,M *2 -1,2)): IF DAY >D AND M < >2 THEN PRINT CHR$(7);: GOTO 3150
3190 IF M = 2 THEN YY = Y: GOSUB 2600: IF DAY >D +LEAP THEN PRINT CHR$(7);: GOTO 3150
3200 Y$ = "": IF N$(M,DAY) < >"" THEN Y$ = N$(M,DAY): VTAB 17: HTAB 7: CALL -868: PRINT "(";Y$;")";
3210 VTAB 16: HTAB 7: CALL -868: PRINT "..................";: HTAB 7: INPUT "";A$
3220 IF A$ = "" AND Y$ < >"" THEN CALL -868: VTAB 16: HTAB 7: PRINT Y$: GOTO 3300
3225 IF A$ = "*" THEN CALL -868: PRINT "<DELETED>";:N$(M,DAY) = "": GOTO 3300
3230 IF A$ = "^" THEN 3400
3240 IF A$ = "" THEN 3300
3250 IF LEN(A$) >18 THEN PRINT CHR$(7);: GOTO 3200
3260 FOR I = 1 TO LEN(A$): IF MID$ (A$,I,1) = "/" THEN 3280
3270 NEXT : GOTO 3290
3280 IF I >10 OR LEN(A$) -I >9 THEN PRINT CHR$(7);: GOTO 3200
3290 N$(M,DAY) = A$
3300 FOR I = 1 TO 750: NEXT I
3310 L = 1
3320 VTAB 11: CALL -958: GOTO 3030
3400 VTAB 20: CALL -958: INPUT "SAVE FILE TO DISK? ";A$
3410 IF LEFT$(A$,1) = "Y" THEN GOSUB 6000
3420 GOTO 500
4000 REM ** ENTER HOLIDAYS **
4010 A$ = "ENTER HOLIDAYS": GOSUB 8000
4020 VTAB 8: HTAB 1: PRINT "YEAR (";YE;"):"
4030 VTAB 12: HTAB 1: PRINT "HOLIDAY:"
4040 VTAB 14: HTAB 5: PRINT "MONTH:";: HTAB 28: PRINT "DAY:"
4060 VTAB 8: HTAB 14: CALL -868: INPUT "";Y$
4070 IF Y$ = "" THEN Y$ = STR$(YE): VTAB 8: HTAB 14: PRINT Y$;
4080 IF Y$ = "^" THEN 500
4090 Y = VAL(Y$): IF Y <1981 OR Y >2000 THEN PRINT CHR$(7);: GOTO 4060
4092 IF Y < >YE THEN GOSUB 7000:YE = Y
4095 R = 0: IF Y <1987 THEN R = (6 +Y -1986) *17
4100 RESTORE : FOR I = 1 TO 12 +R: READ A$: NEXT
4120 FOR I = 1 TO 17
4130 READ A$: IF VAL(A$) >0 THEN 4300
4140 M = VAL( RIGHT$(A$,2)):A$ = LEFT$(A$, LEN(A$) -2)
4150 VTAB 12: HTAB 10: PRINT A$;
4160 VTAB 14: HTAB 13: PRINT MO$(M);
4170 VTAB 14: HTAB 34: CALL -868: INPUT "";Y$
4180 IF Y$ = "^" THEN 4440: REM SAVE?
4190 IF Y$ = "*" THEN 4410: REM NEXT
4200 DAY = VAL(Y$): IF D<CTRL-A>AY = 0 THEN PRINT CHR$(7);: GOTO 4170
4210 D = VAL( MID$ (DA$,M *2 -1,2)): IF DAY >D AND M < >2 THEN PRINT CHR$(7);: GOTO 4170
4220 IF M = 2 THEN YY = Y: GOSUB 2600: IF DAY >D +LEAP THEN PRINT CHR$(7);: GOTO 4170
4230 IF N$(M,DAY) = "" THEN 4400: REM FILE
4240 VTAB 20: HTAB 1: CALL -868: PRINT "REPLACE ";N$(M,DAY)
4250 PRINT " WITH ";A$;: INPUT " OK? ";B$
4260 IF LEFT$(B$,1) = "Y" THEN 4400: REM FILE
4270 VTAB 21: CALL -868: PRINT " <NOT REPLACED>";
4280 GOTO 4410: REM NEXT
4300 M = VAL( RIGHT$(A$,2)):DAY = VAL( LEFT$(A$,2)):A$ = MID$ (A$,3, LEN(A$) -4)
4310 VTAB 12: HTAB 10: PRINT A$;
4320 VTAB 14: HTAB 13: PRINT MO$(M);
4330 HTAB 34: PRINT DAY
4340 IF N$(M,DAY) = "" OR A$ = N$(M,DAY) THEN 4370
4350 VTAB 20: HTAB 1: CALL -868: PRINT "REPLACE ";N$(M,DAY)
4360 PRINT " WITH ";A$;
4370 INPUT " OK? (Y) ";B$
4375 IF B$ = "^" THEN 4440
4380 IF LEFT$(B$,1) = "Y" OR B$ = "" THEN 4400: REM FILE
4390 VTAB 21: CALL -868: PRINT " <NOT FILED>";: FOR J = 1 TO 500: NEXT J: GOTO 4410: REM NEXT
4400 N$(M,DAY) = A$
4410 VTAB 10: CALL -958: VTAB 12: HTAB 1: PRINT "HOLIDAY:"
4420 VTAB 14: HTAB 5: PRINT "MONTH:";: HTAB 28: PRINT "DAY:"
4430 NEXT I
4440 VTAB 20: CALL -958: INPUT "SAVE FILE TO DISK? ";A$
4450 IF LEFT$(A$,1) = "Y" THEN GOSUB 6000
4460 GOTO 500
4500 REM >1986
4510 DATA 01NEW YEAR'S DAY01,14VALENTINE'S DAY02,WASHINGTON'S BDAY02,17ST PATRICK'S DAY03,PASSOVER04,EASTER04,MOTHER'S DAY05,MEMORIAL DAY05,FATHER'S DAY06
4520 DATA 04INDEPENDENCE DAY07,LABOR DAY09,COLUMBUS DAY10,31HALLOWEEN10,11VETERAN'S DAY11,THANKSGIVING11,HANUKKAH12,25CHRISTMAS12
4530 REM 1981
4540 DATA 01NEW YEAR'S DAY01,14VALENTINE'S DAY02,16WASHINGTON'S BDAY02,17ST PATRICK'S DAY03,19PASSOVER04,19EASTER04,10MOTHER'S DAY05,25MEMORIAL DAY05,21FATHER'S DAY06
4550 DATA 04INDEPENDENCE DAY07,07LABOR DAY09,12COLUMBUS DAY10,31HALLOWEEN10,11VETERAN'S DAY11,26THANKSGIVING11,21HANUKKAH12,25CHRISTMAS12
4560 REM 1982
4570 DATA 01NEW YEAR'S DAY01,14VALENTINE'S DAY02,15WASHINGTON'S BDAY02,17ST PATRICK'S DAY03,08PASSOVER04,11EASTER04,09MOTHER'S DAY05,31MEMORIAL DAY05,20FATHER'S DAY06
4580 DATA 04INDEPENDENCE DAY07,06LABOR DAY09,11COLUMBUS DAY10,31HALLOWEEN10,11VETERAN'S DAY11,25THANKSGIVING11,11HANUKKAH12,25CHRISTMAS12
4590 REM 1983
4600 DATA 01NEW YEAR'S DAY01,14VALENTINE'S DAY02,21WASHINGTON'S BDAY02,17ST PATRICK'S DAY03,29PASSOVER03,03EASTER04,08MOTHER'S DAY05,30MEMORIAL DAY05,19FATHER'S DAY06
4610 DATA 04INDEPENDENCE DAY07,05LABOR DAY09,10COLUMBUS DAY10,31HALLOWEEN10,11VETERAN'S DAY11,24THANKSGIVING11,01HANUKKAH12,25CHRISTMAS12
4620 REM 1984
4630 DATA 01NEW YEAR'S DAY01,14VALENTINE'S DAY02,20WASHINGTON'S BDAY02,17ST PATRICK'S DAY03,17PASSOVER04,22EASTER04,13MOTHER'S DAY05,28MEMORIAL DAY05,17FATHER'S DAY06
4640 DATA 04INDEPENDENCE DAY07,03LABOR DAY09,08COLUMBUS DAY10,31HALLOWEEN10,11VETERAN'S DAY11,22THANKSGIVING11,19HANUKKAH12,25CHRISTMAS12
4650 REM 1985
4660 DATA 01NEW YEAR'S DAY01,14VALENTINE'S DAY02,18WASHINGTON'S BDAY02,17ST PATRICK'S DAY03,06PASSOVER04,07EASTER04,12MOTHER'S DAY05,27MEMORIAL DAY05,16FATHER'S DAY06
4670 DATA 04INDEPENDENCE DAY07,02LABOR DAY09,14COLUMBUS DAY10,31HALLOWEEN10,11VETERAN'S DAY11,28THANKSGIVING11,08HANUKKAH12,25CHRISTMAS12
4680 REM 1986
4690 DATA 01NEW YEAR'S DAY01,14VALENTINE'S DAY02,17WASHINGTON'S BDAY02,17ST PATRICK'S DAY03,24PASSOVER04,30EASTER03,11MOTHER'S DAY05,26MEMORIAL DAY05,15FATHER'S DAY06
4700 DATA 04INDEPENDENCE DAY07,01LABOR DAY09,13COLUMBUS DAY10,31HALLOWEEN10,11VETERAN'S DAY11,27THANKSGIVING11,27HANUKKAH12,25CHRISTMAS12
5000 REM ** LIST DATES **
5010 A$ = "LIST DATES": GOSUB 8000
5020 VTAB 8: HTAB 1: PRINT "YEAR (";YE;"):"
5030 VTAB 10: HTAB 1: PRINT "FROM MONTH (JAN):"
5040 VTAB 12: HTAB 1: PRINT "TO MONTH (DEC):"
5050 VTAB 14: HTAB 1: PRINT "PRINTER OR SCREEN:"
5060 VTAB 8: HTAB 14: CALL -868: INPUT "";Y$
5070 IF Y$ = "^" THEN 500
5080 IF Y$ = "" THEN Y$ = STR$(YE): VTAB 8: HTAB 14: PRINT Y$
5090 Y = VAL(Y$): IF Y <1981 OR Y >2000 THEN PRINT CHR$(7);: GOTO 5060
5100 IF Y < >YE THEN GOSUB 7000:YE = Y: REM LOAD
5110 VTAB 10: HTAB 19: CALL -868: INPUT "";A$
5120 IF A$ = "^" THEN 500
5130 IF A$ = "" THEN A$ = "JAN": VTAB 10: HTAB 19: PRINT A$
5140 GOSUB 1280: IF ERR THEN 5110
5150 F = VAL(A$)
5160 VTAB 12: HTAB 17: CALL -868: INPUT "";A$
5170 IF A$ = "^" THEN 500
5180 IF A$ = "" THEN A$ = "DEC": VTAB 12: HTAB 17: PRINT A$
5190 GOSUB 1280: IF ERR THEN 5160
5200 T = VAL(A$)
5210 VTAB 14: HTAB 20: CALL -868: INPUT "";A$
5220 IF A$ = "^" THEN 500
5230 IF LEFT$(A$,1) = "S" THEN 5260
5240 IF LEFT$(A$,1) < >"P" THEN PRINT CHR$(7);: GOTO 5210
5250 PRINT D$;"PR#";SLOT
5255 PRINT : PRINT : PRINT
5260 HOME
5270 A$ = "DATES LIST: " + STR$(Y)
5280 PRINT TAB( 12);A$
5290 A$ = MO$(F) +" THRU " +MO$(T)
5300 PRINT TAB( (40 - LEN(A$))/2);A$
5310 PRINT : PRINT
5320 FOR M = F TO T
5330 PRINT : PRINT MO$(M)
5340 FOR D = 1 TO 31
5350 IF N$(M,D) = "" THEN 5370
5360 PRINT TAB( 3);D; TAB( 7);N$(M,D)
5370 NEXT D
5380 NEXT M
5385 PRINT CHR$(12)
5390 PRINT D$;"PR#0"
5400 PRINT : INPUT " <HIT 'RETURN' TO CONTINUE...";A$
5410 GOTO 500
6000 REM ** SAVE TO DISK **
6010 ONERR GOTO 11000
6015 SAV = 1
6020 PRINT " (";YE;: INPUT ") ARE YOU SURE? ";B$
6030 IF LEFT$(B$,1) = "N" THEN 6160
6040 IF LEFT$(B$,1) < >"Y" THEN PRINT CHR$(7);: GOTO 6020
6050 B$ = "CAL.FILE-" + STR$(YE)
6060 PRINT D$;"UNLOCK";B$
6070 PRINT D$;"OPEN";B$
6080 PRINT D$;"WRITE";B$
6090 FOR M = 1 TO 12
6100 FOR D = 1 TO 31
6110 PRINT N$(M,D)
6120 NEXT D
6130 NEXT M
6140 PRINT D$;"CLOSE";B$
6150 PRINT D$;"LOCK";B$
6160 POKE 216,0: REM OFF ONERR
6170 PRINT CHR$(7);
6180 RETURN
7000 REM **LOAD FROM DISK**
7010 SAV = 0
7020 VTAB 20: PRINT Y;" FILE NOT IN MEMORY."
7030 INPUT "LOAD FROM DISK? ";B$
7040 IF LEFT$(B$,1) = "N" THEN 7200
7050 IF LEFT$(B$,1) < >"Y" THEN PRINT CHR$(7);: GOTO 7030
7060 ONERR GOTO 11000
7070 B$ = "CAL.FILE-" + STR$(Y)
7080 PRINT D$;"OPEN";B$
7090 PRINT D$;"READ";B$
7100 FOR M = 1 TO 12
7110 FOR D = 1 TO 31
7120 INPUT N$(M,D)
7130 NEXT D
7140 NEXT M
7150 PRINT D$;"CLOSE";B$
7160 PRINT CHR$(7);: POKE 216,0: REM OFF ONERR
7170 RETURN
7200 PRINT " <CLEARING OLD DATE FILE>"
7210 FOR M = 1 TO 12
7220 FOR D = 1 TO 31
7230 N$(M,D) = ""
7240 NEXT D
7250 NEXT M
7260 PRINT CHR$(7);
7270 RETURN
8000 HOME : PRINT
8010 A$ = " " +A$ +" ": HTAB (40 - LEN(A$))/2
8020 INVERSE : PRINT A$: NORMAL
8030 PRINT
8040 RETURN
10000 REM ** QUIT **
10005 A$ = "QUIT": GOSUB 8000
10010 VTAB 5: CALL -868: INPUT "ARE YOU SURE? ";A$
10020 IF LEFT$(A$,1) = "N" THEN 500
10030 IF LEFT$(A$,1) < >"Y" THEN PRINT CHR$(7);: GOTO 10010
10040 VTAB 10: PRINT "APPLE CAL"; TAB( 23);"BY GLENN TEMAN"
10050 VTAB 20: HTAB 10: PRINT "<G O O D B Y E !!>"
10060 PRINT : END
11000 REM **ONERR**
11010 ERR = PEEK(222)
11020 L = PEEK(218) + PEEK(219) *256: CALL 768: REM FIX STACK
11030 ON (ERR) GOTO 11040,11040,11040,11080,11130,11190,11040,11220,11260
11040 REM -UNIDENT ERROR
11050 PRINT : PRINT "ERROR: "; CHR$(7);ERR
11060 PRINT " ON LINE ";L; CHR$(7)
11070 PRINT : END
11080 REM -WRT PROTECTED
11090 PRINT "<WRITE PROTECTED - INSERT NEW DISK..."
11100 INPUT " <AND HIT 'RETURN': ";A$
11120 GOSUB 6070: GOTO 500
11130 REM -END OF DATA
11135 REM ('LOAD FROM DISK' ERROR)
11140 IF SAV = 1 THEN 11040
11150 PRINT D$;"DELETE";B$
11160 VTAB 20: CALL -868
11165 IF NOO THEN 160
11170 PRINT "<FILE NOT FOUND!>"
11180 POKE 216,0: GOSUB 7200: GOTO 500
11190 REM -FILE NOT FOUND
11195 REM ('SAVE TO DISK' ERROR)
11200 IF SAV = 0 THEN 11040
11210 GOSUB 6070: REM SKIP 'UNLOCK'
11215 GOTO 500
11220 REM -I/O ERROR
11230 PRINT "<I/O ERROR - INSERT NEW DISK..."
11240 INPUT " <AND HIT 'RETURN': ";A$
11245 IF SAV = 1 THEN GOSUB 6060: GOTO 500
11250 IF SAV = 0 THEN GOSUB 7080: GOTO 500
11260 REM -DISK FULL
11270 PRINT D$;"DELETE";B$
11280 PRINT "<DISK FULL - INSERT NEW DISK..."
11290 INPUT " <AND HIT 'RETURN': ";A$
11300 GOSUB 6070: GOTO 500
20000 REM ** TITLE PAGE **
20005 TEXT : HOME :L = 25
20007 PRINT CHR$(7);
20010 VTAB 8: HTAB 9: PRINT "*********************"
20020 VTAB 12: HTAB 9: PRINT "*********************"
20030 VTAB 9: FOR I = 1 TO 3
20040 HTAB 9: PRINT "*";: HTAB 29: PRINT "*"
20050 NEXT I
20055 FLASH
20060 VTAB 10: HTAB 11: PRINT "A P P L E C A L"
20065 NORMAL
20070 VTAB 18: HTAB 23: PRINT "BY GLENN TEMAN"
20080 POKE -16368,0
20090 VTAB 23: PRINT " <HIT ANY KEY TO CONTINUE...>"
20100 FOR I = 1 TO 2 STEP 0
20110 VTAB 8: FOR J = 9 TO 28
20120 HTAB J: PRINT " ";
20130 FOR D = 1 TO L: NEXT D
20140 HTAB J: PRINT "*";
20150 NEXT J
20160 IF PEEK( -16384) >127 THEN 20350
20170 FOR J = 8 TO 11
20180 VTAB J: HTAB 29: PRINT " ";
20190 FOR D = 1 TO L: NEXT D
20195 HTAB 29: PRINT "*";
20200 NEXT J
20210 IF PEEK( -16384) >127 THEN 20350
20220 VTAB 12: FOR J = 29 TO 10 STEP -1
20230 HTAB J: PRINT " ";
20240 FOR D = 1 TO L: NEXT D
20250 HTAB J: PRINT "*";
20260 NEXT J
20270 IF PEEK( -16384) >127 THEN 20350
20280 FOR J = 12 TO 9 STEP -1
20290 HTAB 9: VTAB J: PRINT " ";
20300 FOR D = 1 TO L: NEXT D
20310 HTAB 9: PRINT "*";
20320 NEXT J
20330 IF PEEK( -16384) >127 THEN 20350
20340 NEXT I
20350 POKE -16368,0
20360 PRINT CHR$(7)
20370 RETURN
20400 REM ** FIX STACK ONERR **
20405 REM FROM PG 136, APPLE REF MANUAL
20410 A$ = "104168104166223154072152072096"
20420 FOR I = 1 TO 10
20430 POKE 767 +I, VAL( MID$ (A$,I *3 -2,3))
20440 NEXT
20450 RETURN